home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga CD-ROM Collection
/
Amiga CD-ROM Collection - Auge 4000 and Cactus and Demo Util.iso
/
cactus
/
09
/
microspell
/
source.c
< prev
next >
Wrap
C/C++ Source or Header
|
1988-01-19
|
2KB
|
83 lines
/* SOURCE: Source file processing for MicroSPELL 1.0
Spell Checker and Corrector
(C)opyright May 1987 by Daniel Lawrence
All Rights Reserved
*/
#include <stdio.h>
#include "dopt.h"
#include "dstruct.h"
#include "ddef.h"
WORD *getword() /* get the next word in the input stream */
{
register char *wp; /* ptr into word */
register int len; /* length of word */
static WORD rword; /* word to return */
static char text[NSTRING]; /* text of word */
/* text MUST immediatly follow rword for now */
nextfile:
/* first check if we need a new file */
if (srcfile == NULL) {
/* are we out of input files? */
if (++sfnum >= numspell)
return(NULL);
/* open the next one! */
srcfile = fopen(splname[sfnum], "r");
if (srcfile == NULL) {
printf("%%Can not open input file '%s'\n",
splname[sfnum]);
return(NULL);
}
/* and make sure we are ready for more... */
iptr = NULL;
srcline = -1;
}
/* skip off leading non-alphas */
if (iptr)
while (*iptr && !isletter(*iptr))
iptr++;
nextline:
/* time to read a new line? */
if (iptr == NULL || *iptr == 0) {
if (fgets(iline, MAXLINE - 1, srcfile) == NULL) {
fclose(srcfile);
srcfile = NULL;
goto nextfile;
}
iptr = iline;
srcline++;
}
/* skip off leading non-alphas */
while (*iptr && !isletter(*iptr))
iptr++;
if (*iptr == 0)
goto nextline;
/* and now set the word up */
wp = &rword.w_text[0];
rword.w_file = sfnum;
rword.w_line = srcline;
rword.w_col = iptr - &iline[0];
while (*iptr && isletter(*iptr))
*wp++ = *iptr++;
/* terminate and return it... */
*wp = 0;
if (rword.w_text[1] == 0)
goto nextfile;
return(&rword);
}